#include <cstddef> // 用于 size_t
#include <cstdlib> // 用于 malloc、free
#include <iostream>
#include <new> // 用于 std::nothrow_t 和 std::bad_alloc

using namespace std;

class Allocator {
public:
  // 使用默认分配器进行分配
  static void *allocate(std::size_t n) {
    void *p = std::malloc(n);
    if (!p)
      throw std::bad_alloc();
    return p;
  }

  // 使用默认分配器进行释放
  static void deallocate(void *p, std::size_t /*n*/) noexcept { std::free(p); }

  // 用于重新分配内存的辅助函数（可选）
  // ...

  // 其他可能需要的函数，如构造、析构、拷贝等（可选）
  // ...

  // 静态成员，通常不需要创建Allocator对象
private:
  Allocator() = delete;
  ~Allocator() = delete;
  Allocator(const Allocator &) = delete;
  Allocator &operator=(const Allocator &) = delete;
};

// 使用示例
int main() {
  try {
    // 分配内存
    int *p = static_cast<int *>(Allocator::allocate(sizeof(int) * 10));
    for (int i = 0; i < 10; ++i)
      p[i] = i;

    // 使用内存...
    std::cout << "*p = " << *p << std::endl;

    // 释放内存
    Allocator::deallocate(p, sizeof(int) * 10);

    if (p != nullptr) {
      cout << "failed to deallocate memory" << endl;
      cout << p << endl;
      // 处理释放失败...
    } else {
      cout << "successfully deallocated memory" << endl;
    }
  } catch (const std::bad_alloc &e) {
    // 处理内存分配失败...
  }

  return 0;
}